package com.app.util;

import cn.hutool.core.io.FileUtil;
import com.app.common.SystemConstant;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.*;
import java.util.Map;

@Slf4j
public abstract class AbstractTemplate {
    // 使用thymeleaf模版引擎
    private TemplateEngine engine;
    // 模版名称
    private String templateName;

    private AbstractTemplate() {}

    public AbstractTemplate(TemplateEngine engine, String templateName) {
        this.engine = engine;
        this.templateName=templateName;
    }

    /**
     * 模版名称
     *
     * @return
     */
    protected String templateName(){
        return this.templateName;
    }

    /**
     * 所有的参数数据
     *
     * @return
     */
    private Map<String, Object> variables(){
        Map<String, Object> variables = Maps.newHashMap();
        // 对应html模版中的template变量，取值的时候就按照“${template.字段名}”格式，可自行修改
        variables.put("template", this);
        return variables;
    };

    /**
     * 解析模版，生成html
     *
     * @return
     */
    public String process() {
        Context ctx = new Context();
        // 设置model
        ctx.setVariables(variables());
        // 根据model解析成html字符串
        return engine.process(templateName(), ctx);
    }

    public void parse2Pdf(String targetPdfFilePath, String mobile) {
        String html = process();


//        System.out.println("生成pdf成功，文件html:"+html);

        // 通过html转换成pdf
//        HtmlUtil.html2Pdf(html, targetPdfFilePath);
        String tempFile = SystemConstant.DEFAULT_PDF_URL + "pdf/temp/" + mobile + ".html";
        if (FileUtil.exist(tempFile)) {
            FileUtil.del(tempFile);
        }
        File file = FileUtil.writeString(html, new File(tempFile), "utf-8");

        //        自定义水印
        String waterMarkText = "";
        try {
            InputStream inputStream = new FileInputStream(file);
            if (FileUtil.exist(targetPdfFilePath)) {
                FileUtil.del(targetPdfFilePath);
            }
            OutputStream outputStream = new FileOutputStream(FileUtil.newFile(targetPdfFilePath));
            //微软雅黑在windows系统里的位置如下，linux系统直接拷贝该文件放在linux目录下即可
            //        String fontPath = "src/main/resources/font/STHeiti Light.ttc,0";
            String fontPath = HtmlUtil.FONT_PATH;
            HtmlToPdfUtils.convertToPdf(inputStream, waterMarkText, fontPath, outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
